import { SearchResult, Suggestion } from "@/types/data";
import { SearchAction } from "@/types/store";

// 定义搜索模块的状态类型
type SearchState = {
  suggestion: Suggestion["options"]; // 搜索建议
  searchResults: {
    page: number; // 当前页数
    per_page: number; // 每页显示数量
    total_count: number; // 总结果数量
    results: []; // 结果数组
  };
};

// 初始状态
const initialState: SearchState = {
  suggestion: [], // 初始搜索建议为空数组
  searchResults: {
    page: 1, // 当前页数，默认为第一页
    per_page: 10, // 每页显示数量，默认为10条
    total_count: 0, // 总结果数量，默认为0
    results: [], // 结果数组，默认为空数组
  },
};

// 定义搜索模块的 reducer 函数
const Search = (state = initialState, action: any): SearchState => {
  switch (action.type) {
    // 处理获取搜索建议的 action
    case "search/suggestion":
      return {
        ...state,
        suggestion: action.payload, // 更新搜索建议
      };
    // 处理清除搜索建议的 action
    case "search/clearSuggestion":
      return {
        ...state,
        suggestion: [], // 清空搜索建议
      };
    // 处理获取搜索结果的 action

    case "search/getSearchResult":
      // 在此处理分页逻辑
      const { results, total_count } = action.payload;
      const { searchResults } = state;
      const newResults = [...searchResults.results, ...results]; // 将新结果追加到旧结果后面
      return {
        ...state,
        searchResults: {
          ...searchResults,
          page: searchResults.page + 1, // 更新当前页数
          total_count, // 更新总结果数量
          results: newResults as any, // 更新结果数组
        },
      };
    case "search/clearSearchResult":
      return {
        ...state,
        searchResults: {
          per_page: 10,
          page: 1, // 更新当前页数
          total_count: 0, // 更新总结果数量
          results: [], // 更新结果数组
        },
      };
    default:
      return state; // 默认返回当前状态
  }
};

export default Search;
